/*
 * Copyright (C), 2002-2017, 南京苏宁软件技术有限公司
 * FileName: AreaTaskDao.java
 * Author:   10070706
 * Date:     2017年1月10日 下午2:49:40
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.suning.sawp.intf.dao.mainpushnew;

import java.util.List;

import com.suning.sawp.po.mainpushnew.AreaModelRel;
import com.suning.sawp.po.mainpushnew.AreaTask;
import com.suning.sawp.po.mainpushnew.StoreTask;
import com.suning.sawp.vo.mainpushnew.AreaTaskDetailVo;
import com.suning.sawp.vo.mainpushnew.AreaTaskModelCompleteVo;
import com.suning.sawp.vo.mainpushnew.AreaTaskModelDetailVo;
import com.suning.sawp.vo.mainpushnew.AreaTaskStoreDetailVo;
import com.suning.sawp.vo.mainpushnew.AreaTaskTargetExportVo;
import com.suning.sawp.vo.mainpushnew.AreaTaskVo;
import com.suning.sawp.vo.mainpushnew.CalStoreTaskDistributeVo;
import com.suning.sawp.vo.mainpushnew.StoreInfoVo;
import com.suning.sawp.vo.mainpushnew.StoreTaskTotalAmountVo;
import com.suning.sawp.vo.mainpushnew.StoreTaskTypeActualVo;
import com.suning.sawp.vo.mainpushnew.StoreTaskTypeTargetVo;

/**
 * 功能简述: 大区任务Dao<br>
 *
 * @author 10070706 陈辉
 */
public interface AreaTaskDao {

    /**
     * 
     * 功能描述: 根据工号查询大区人员表，得到对应的5位大区编码<br>
     * 
     * @param userId
     * @return
     */
    String query5DisCodeByUserId(String userId);

    /**
     * 
     * 功能描述: 大区任务管理列表页<br>
     *
     * @param disCode
     * @param taskTopic
     * @param month
     * @param startRow
     * @param pageLimit
     * @return
     */
    List<AreaTaskVo> queryAreaTaskInfo(String disCode, String taskTopic, String month, Integer startRow,
            Integer pageLimit);

    /**
     * 
     * 功能描述: 大区任务管理列表页总条数<br>
     * 
     * @param disCode
     * @param taskTopic
     * @param month
     * @param startRow
     * @param pageLimit
     * @return
     */
    Integer queryAreaTaskInfoSize(String disCode, String taskTopic, String month, Integer startRow, Integer pageLimit);

    /**
     * 
     * 功能描述: 查询任务目标情况<br>
     *
     * @param areaTaskId
     * @return
     */
    List<StoreTaskTypeTargetVo> queryStoreTaskTargetInfo(Long areaTaskId);

    /**
     * 
     * 功能描述: 查询大区任务完成情况<br>
     *
     * @param areaTaskId
     * @return
     */
    List<StoreTaskTypeActualVo> queryStoreTaskActualSaleInfo(Long hqTaskId, String disCode);

    /**
     * 
     * 功能描述: 门店品类总完成金额<br>
     *
     * @param disCode
     * @param cateCode
     * @param month
     * @return
     */
    List<StoreTaskTotalAmountVo> queryTotalAmountOfCate(String disCode, String cateCode, String month);

    /**
     * 
     * 功能描述: 根据大区任务编码查询大区任务detail<br>
     *
     * @param areaTaskId
     * @return
     */
    AreaTaskDetailVo queryAreaTaskDetailByAreaTaskId(Long areaTaskId);

    /**
     * 
     * 功能描述: 根据大区任务id查询大区总目标数量<br>
     *
     * @param areaTaskId
     * @return
     */
    Integer queryAreaTaskTotalTargetNum(Long areaTaskId);

    /**
     * 
     * 功能描述: 查询大区任务完成情况<br>
     *
     * @param hqTaskId
     * @param disCode
     * @return
     */
    Integer queryAreaTaskTotalCompleteNum(Long hqTaskId, String disCode);

    /**
     * 
     * 功能描述: 根据大区任务id查询 款数明细，还需要拼装 目标完成数量<br>
     *
     * @param areaTaskId
     * @param startRow
     * @param pageLimit
     * @return
     */
    List<AreaTaskModelDetailVo> queryAreaTaskModelDetailList(Long areaTaskId, Integer startRow, Integer pageLimit);

    /**
     * 
     * 功能描述: 根据大区任务id查询 款数明细的总条数<br>
     *
     * @param areaTaskId
     * @param startRow
     * @param pageLimit
     * @return
     */
    Integer queryAreaTaskModelDetailSize(Long areaTaskId);

    /**
     * 
     * 功能描述: 查询大区，品类，下属的销售数量<br>
     *
     * @param disCode
     * @param cateCode
     * @param month
     * @return
     */
    List<AreaTaskModelCompleteVo> queryAreaTaskModelComplete(String disCode, String cateCode, String month);

    /**
     * 
     * 功能描述: 通过大区任务id和款数id查询大区下属门店此款数的分配情况,没有分配的门店left join<br>
     *
     * @param areaTaskId
     * @param modelId
     * @return
     */
    List<AreaTaskStoreDetailVo> queryStoreTaskDistributeDetailByAreaTaskIdAndModelIdForAllStore(Long areaTaskId,
            Long modelId);

    /**
     * 
     * 功能描述: 通过大区任务id和款数id查询大区下属门店此款数的分配情况<br>
     *
     * @param areaTaskId
     * @param modelId
     * @return
     */
    List<AreaTaskStoreDetailVo> queryStoreTaskDistributeDetailByAreaTaskIdAndModelId(Long areaTaskId, Long modelId);

    /**
     * 
     * 功能描述: 修改门店款数表数据，true表示修改成功，false表示数据不存在，修改失败，需要新增<br>
     *
     * @param storeTaskId
     * @param modelId
     * @param num
     * @return
     */
    void updateStoreTaskModelNum(List<AreaTaskStoreDetailVo> update);

    /**
     * 
     * 功能描述: 批量插入门店款数关系表数据<br>
     *
     * @param storeModelRel
     */
    void batchSaveTaskModelNum(Long hqTaskId, List<AreaTaskStoreDetailVo> insert);

    /**
     * 
     * 功能描述: 查询大区任务信息<br>
     *
     * @param hqTaskId
     * @param disCode
     * @return
     */
    AreaTask selectAreaTaskByIdAndDisCode(Long hqTaskId, String disCode);

    /**
     * 
     * 功能描述: 根据大区任务id查询大区款数明细，导出<br>
     *
     * @param areaTaskId
     * @return
     */
    List<AreaTaskTargetExportVo> queryAreaTaskModelDetail4Export(Long areaTaskId);

    /**
     * 
     * 功能描述: 根据大区任务id查询大区下属的门店编码和门店名称<br>
     *
     * @param areaTaskId
     * @return
     */
    List<StoreInfoVo> queryStoreInfo(Long areaTaskId);

    /**
     * 
     * 功能描述: 根据大区任务id查询大区任务下面的门店任务列表<br>
     *
     * @param areaTaskId
     * @return
     */
    List<StoreTask> queryStoreTaskListByAreaTaskId(Long areaTaskId);

    /**
     * 
     * 功能描述: 根据总部任务id查询所有的大区任务<br>
     *
     * @param hqTaskId
     * @return
     */
    List<AreaTask> queryAreaTaskByHqTaskId(Long hqTaskId);

    /**
     * 
     * 功能描述: 大区任务下属所有款数的分配情况<br>
     *
     * @return
     */
    List<AreaModelRel> queryAreaModelRel(Long areaTaskId);

    /**
     * 
     * 功能描述: 根据大区任务id和款数id，查询大区款数表<br>
     *
     * @param areaTaskId
     * @param modelId
     * @return
     */
    AreaModelRel queryAreaModelRelById(Long areaTaskId, Long modelId);

    /**
     * 
     * 功能描述: 根据大区任务id查询大区任务表<br>
     *
     * @param areaTaskId
     * @return
     */
    AreaTask queryAreaTaskByAreaTaskId(Long areaTaskId);

    /**
     * 
     * 功能描述: 删除分配中没有写数量的款数信息<br>
     * 
     * @param need2Del
     */
    void delNotNeedStoreModel(List<AreaTaskStoreDetailVo> need2Del);

    /**
     * 
     * 功能描述: 修改大区任务款数的状态<br>
     * 
     * @param areaTaskId
     * @param modelId
     * @param status
     */
    void modifyAreaModelRelStatus(Long areaTaskId, Long modelId, Short status);

    /**
     * 
     * 功能描述: 查询门店任务的分配总数量<br>
     * 
     * @param areaTaskId
     * @return
     */
    List<CalStoreTaskDistributeVo> queryStoreTaskDistributeInfo(Long areaTaskId);

    /**
     * 
     * 功能描述: 大区分配任务至门店时修改门店已分配的总数量<br>
     * 
     * @param calNum
     */
    void calStoreTaskDistributeNum(List<CalStoreTaskDistributeVo> calNum);

}
